package top.jacktgq.sxt.bio.udp.demo6;
import java.io.*;

/**
 * @Author CandyWall
 * @Date 2019/10/20--20:50
 * @Description Io工具类
 *                  1、图片（文件）读取到字节数组
 *                  2、字节数组读取到图片（文件）
 */
public class IoUtils {
    /**
     * 图片（文件）读取到字节数组
     */
    public static byte[] fileToByteArray(String filePath) {
        //1、创建源于目的地
        File src = new File(filePath);
        byte[] dest = null;

        //2、选择流
        InputStream is = null;
        ByteArrayOutputStream baos = null;

        try {
            is = new FileInputStream(src);
            baos = new ByteArrayOutputStream();
            //3、操作（分段读取）
            byte[] bytes = new byte[1024 * 10]; //缓冲容器
            int len = -1;
            while ((len = is.read(bytes)) != -1) {
                baos.write(bytes, 0, len);  //写出到字节数组中
            }
            baos.flush();
            return baos.toByteArray();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4、释放资源
            if (null != is) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        return null;
    }

    /**
     * 字节数组读取到图片（文件）
     */
    public static void byteArrayToFile(byte[] bytes, String filePath) {
        //1、创建流
        File dest = new File(filePath);
        //2、选择流
        try (
                ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
                FileOutputStream fos = new FileOutputStream(dest);
            ) {
            //3、操作（分段读取）
            byte[] flush = new byte[10];  //缓冲容器
            int len = -1;               //接收长度
            while ((len = bais.read(flush)) != -1) {
                fos.write(flush, 0, len);
            }
            fos.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
